package com.graduate.twentyone.service.Impl;

import com.graduate.twentyone.domain.*;
import com.graduate.twentyone.domain.result.QuerySaleByCate;
import com.graduate.twentyone.domain.result.RecentMonth;
import com.graduate.twentyone.mapper.FoodMapper;
import com.graduate.twentyone.mapper.SaleMapper;
import com.graduate.twentyone.service.ValumesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Service
public class ValumesServiceImpl implements ValumesService {
    @Autowired
    private SaleMapper saleMapper;

    @Autowired
    FoodMapper foodMapper;

    
    @Override
    public List<RecentMonth> queryRecentMonth() {
        return foodMapper.queryRecentMonth();
    }

    @Override
    public List<QuerySaleByCate> querySaleByCate() {
        return foodMapper.querySaleByCate();
    }


// 先获取转型后的时间 然后和第二个转型后的时间对比
//    年是4
//    月是7
//    日是10


    /***
     先查询全部订单
     获取当前行的数据
     创建大集合valumesArrayList

     创建菜名对象，
     创建菜类对象
     然后根据时间进行分组
     时间要经过处理（日月年）
     如果是第一个时间，
     获取时间数据，放在valumes中的daytime
     获取菜名以及num*price
     存入valumes中的foodmess集合中
     获取类名和num*price
     存入valumes中的moldmess集合中

     当获取第二个及以后的时间
     如果对比前一个时间，如果相同，(那么就在一个arraylist中)
     然后判断 是不是一个菜名
     如果是，那么把价格相加，
     否则，new一个菜名对象
     把数据放入，这个菜名对象里面，
     把这个存入foodmess集合中

     然后判断 是不是一个菜类
     如果是，那么把价格相加，
     否则，new一个菜类对象
     把数据放入，这个菜类对象里面，
     把这个存入moldmess集合中
     如果时间不同,把第一个valumes放入listArraylist中
     清空valumes
     */
    public List<Valumes> SevenDayValume()  {

        List<Valume> selectvalume = saleMapper.SevenSelectValume();

//       集合
        ArrayList<Valumes> valumesArrayList = new ArrayList<>();

        ArrayList<ValumeFood> valumeFoodArrayList = new ArrayList<>();
        ArrayList<ValumeMold> valumeMoldArrayList = new ArrayList<>();
        Valumes valumes = new Valumes();
        ValumeFood valumeFood = new ValumeFood();
        ValumeMold valumeMold = new ValumeMold();

        for (int i = 0; i < selectvalume.size(); i++) {
//            获取日
//            SimpleDateFormat  df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //System.out.println("selectvalume.get(i).getDatetime() = " + selectvalume.get(i).getDatetime());
            //String datetime = (df.format(selectvalume.get(i).getDatetime().toString())).substring(0,10);

            Date datetime = selectvalume.get(i).getDatetime();
            datetime.setHours(0);
            datetime.setMinutes(0);
            datetime.setSeconds(0);

            if (i == 0) {

//                把菜的数据分别放入list
                valumeFood.setFoodname(selectvalume.get(i).getFname());
                valumeFood.setNum(selectvalume.get(i).getNum());
                valumeFood.setFoodprice((selectvalume.get(i).getNum()) * (selectvalume.get(i).getFprice()));
                valumeMold.setMoldname(selectvalume.get(i).getCate_name());
                valumeMold.setNum(selectvalume.get(i).getNum());
                valumeMold.setMoldprice((selectvalume.get(i).getNum()) * (selectvalume.get(i).getFprice()));

                //存valumes对象里面的时间
                valumes.setDaytime(datetime);
//               将菜的对象存入  菜的list
                valumeFoodArrayList.add(valumeFood);
                valumeMoldArrayList.add(valumeMold);
//                valumes存入 菜的list
                valumes.setFoodmess(valumeFoodArrayList);
                valumes.setMoldmess(valumeMoldArrayList);

            } else {
//                获取前一个的时间
                Date datetime1 = selectvalume.get(i - 1).getDatetime();
                datetime1.setHours(0);
                datetime1.setMinutes(0);
                datetime1.setSeconds(0);
//                进行对比
                if (datetime.equals(datetime1)) {
//                    时间相同，则对比菜名
                    int x = valumes.getFoodmess().size();
                    for (int j = 0; j < valumes.getFoodmess().size(); j++) {
//                        当菜名相同时，数量、价格相加
//                        System.out.println("valumes.getFoodmess().get(j).getFoodname() = " + valumes.getFoodmess().get(j).getFoodname());
//                        System.out.println("selectvalume.get(i).getFname() = " + selectvalume.get(i).getFname());

                        if (valumes.getFoodmess().get(j).getFoodname().equals(selectvalume.get(i).getFname())) {
//                            System.out.println("相同");
                            valumes.getFoodmess().get(j).setNum(valumes.getFoodmess().get(j).getNum() + selectvalume.get(i).getNum());
                            valumes.getFoodmess().get(j).setFoodprice(valumes.getFoodmess().get(j).getFoodprice() + selectvalume.get(i).getFprice() * selectvalume.get(i).getNum());
                        } else if(!(valumes.getFoodmess().get(j).getFoodname().equals(selectvalume.get(i).getFname())) && (x == j+1))  {
//                            System.out.println("不同");
//                          菜名不同 在list里面加入新的对象
                            valumeFood = new ValumeFood();
                            valumeFood.setFoodname(selectvalume.get(i).getFname());
                            valumeFood.setNum(selectvalume.get(i).getNum());
                            valumeFood.setFoodprice(selectvalume.get(i).getFprice() * selectvalume.get(i).getFprice());
//                            存入list中
                            valumeFoodArrayList.add(valumeFood);
                        }
                    }

                    //                    时间相同，则对比菜类
                    int y = valumes.getMoldmess().size();
                    for (int j = 0; j < valumes.getMoldmess().size(); j++) {
//                        当菜类相同时，价格相加
                        if (valumes.getMoldmess().get(j).getMoldname().equals(selectvalume.get(i).getCate_name())) {
                            valumes.getMoldmess().get(j).setNum(valumes.getMoldmess().get(j).getNum() + selectvalume.get(i).getNum());
                            valumes.getMoldmess().get(j).setMoldprice(valumes.getMoldmess().get(j).getMoldprice() + selectvalume.get(i).getFprice() * selectvalume.get(i).getNum());
                        } else if (!(valumes.getMoldmess().get(j).getMoldname().equals(selectvalume.get(i).getCate_name()))&& (j==y-1)) {
//                          菜类不同 在list里面加入新的对象
                            valumeMold = new ValumeMold();
                            valumeMold.setMoldname(selectvalume.get(i).getCate_name());
                            valumeMold.setNum(selectvalume.get(i).getNum());
                            valumeMold.setMoldprice(selectvalume.get(i).getFprice() * selectvalume.get(i).getFprice());
//                            存入list中
                            valumeMoldArrayList.add(valumeMold);
                        }
                    }

                } else {
//                    时间不同
//                    把上一个valumes放入valumesArraylist中
//                    清空所有
//                    把当前行的数据放入新的里面
                    valumesArrayList.add(valumes);

                    valumeFoodArrayList = new ArrayList<>();
                    valumeMoldArrayList = new ArrayList<>();
                    valumes = new Valumes();
                    valumeFood = new ValumeFood();
                    valumeMold = new ValumeMold();

//                把菜的数据分别放入list
                    valumeFood.setFoodname(selectvalume.get(i).getFname());
                    valumeFood.setNum(selectvalume.get(i).getNum());
                    valumeFood.setFoodprice((selectvalume.get(i).getNum()) * (selectvalume.get(i).getFprice()));
                    valumeMold.setMoldname(selectvalume.get(i).getCate_name());
                    valumeMold.setNum(selectvalume.get(i).getNum());
                    valumeMold.setMoldprice((selectvalume.get(i).getNum()) * (selectvalume.get(i).getFprice()));

                    //存valumes对象里面的时间
                    valumes.setDaytime(datetime);
//               将菜的对象存入  菜的list
                    valumeFoodArrayList.add(valumeFood);
                    valumeMoldArrayList.add(valumeMold);
//                valumes存入 菜的list
                    valumes.setFoodmess(valumeFoodArrayList);
                    valumes.setMoldmess(valumeMoldArrayList);

                    if (i == selectvalume.size() - 1) {
                        valumesArrayList.add(valumes);
                    }
                }
            }

        }

        return valumesArrayList;
    }



}
